<?php

namespace App\Services\JsTan;


class Ecshop
{
    /**
     * Json方式 查询订单物流轨迹
     */
    function getOrderTracesByJson($code){
        // $requestData= "{'OrderCode':'','ShipperCode':'YTO','LogisticCode':'12345678'}";

        $requestData = [
            'OrderCode' => '',
            'ShipperCode' => 'YZPY',
            'LogisticCode' => $code,
        ];

        $requestData = json_encode($requestData);

        $datas = array(
            'EBusinessID' => $this->EBusinessID,
            'RequestType' => '1002',
            'RequestData' => urlencode($requestData) ,
            'DataType' => '2',
        );
        $datas['DataSign'] = $this->encrypt($requestData, $this->AppKey);
        $result = $this->sendPost($this->ReqURL, $datas);

        //根据公司业务处理返回的信息......

        return $result;
    }

    // 更新库存
    public static function updateInventory($params, &$msg='')
    {
        // / {"so_id":"test","remark":"test","ts":"1733672762","partnerid":"erp","method":"cancel.order","sign":"aaad138d970f219d76bfdba9f1608dc0"}
        // dd($params);
        $api_url = env('SHOP_API_URL');

        $post_data['act'] = 'update_inventory';
        $post_data['params'] = json_encode($params);
        // dd($api_url, $post_data);
        $res = self::sendPost($api_url, $post_data);
        // dd($res);

        if ($res['result'] == 'fail')
        {
            $msg = $res['info'];
            return false;
        }

        return true;
    }

    // 取消订单
    public static function orderCancel($params, &$msg='')
    {
        $api_url = env('SHOP_API_URL');

        $post_data['act'] = 'order_cancel';
        $post_data['params'] = json_encode($params);
        // dd($api_url, $post_data);
        $res = self::sendPost($api_url, $post_data);
        // dd($res);

        if ($res['result'] == 'fail')
        {
            $msg = $res['info'];
            return false;
        }

        return true;
    }

    // 确认收货
    public static function confirmDelivery($params, &$msg='')
    {
        $api_url = env('SHOP_API_URL');

        $post_data['act'] = 'confirm_delivery';
        $post_data['params'] = json_encode($params);
        // dd($api_url, $post_data);
        $res = self::sendPost($api_url, $post_data);
        // dd($res);

        if ($res['result'] == 'fail')
        {
            $msg = $res['info'];
            return false;
        }

        return true;
    }

    // 订单发货
    public static function orderDelivery($params, &$msg='')
    {
        $api_url = env('SHOP_API_URL');

        $post_data['act'] = 'order_delivery';
        $post_data['params'] = json_encode($params);
        // dd($api_url, $post_data);
        $res = self::sendPost($api_url, $post_data);
        // dd($res);

        if ($res['result'] == 'fail')
        {
            $msg = $res['info'];
            return false;
        }

        return true;
    }


    public static function sendPost($url, $data)
    {
        // dd($url, $data);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_HEADER,0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $res = curl_exec($ch);
        curl_close($ch);
        $res = json_decode($res, 1);
        return $res;
    }

    /**
     *  post提交数据
     * @param  string $url 请求Url
     * @param  array $datas 提交的数据
     * @return url响应返回的html
     */
    public static function sendPost_bak($url, $datas)
    {
        $temps = array();
        foreach ($datas as $key => $value) {
            $temps[] = sprintf('%s=%s', $key, $value);
        }

        $post_data = implode('&', $temps);
        $url_info = parse_url($url);

        if(empty($url_info['port']))
        {
            $url_info['port']=80;
        }

        $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
        $httpheader.= "Host:" . $url_info['host'] . "\r\n";
        $httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
        $httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
        $httpheader.= "Connection:close\r\n\r\n";
        $httpheader.= $post_data;
        $fd = fsockopen($url_info['host'], $url_info['port']);
        fwrite($fd, $httpheader);
        $gets = "";
        $headerFlag = true;
        while (!feof($fd))
        {
            if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n"))
            {
                break;
            }
        }

        while (!feof($fd))
        {
            $gets.= fread($fd, 128);
        }

        fclose($fd);

        return $gets;
    }

    /**
     * 电商Sign签名生成
     * @param data 内容
     * @param appkey Appkey
     * @return DataSign签名
     */
    function encrypt($data, $appkey) {
        return urlencode(base64_encode(md5($data.$appkey)));
    }
}
